/*
 * Copyright 2013 Sigurd Randoll <srandoll@digiway.de>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package de.digiway.rapidbreeze.server.infrastructure.rest.info;

import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.core.ClassNamesResourceConfig;
import com.sun.jersey.spi.container.servlet.WebComponent;
import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider;
import com.sun.jersey.test.framework.AppDescriptor;
import com.sun.jersey.test.framework.JerseyTest;
import com.sun.jersey.test.framework.WebAppDescriptor;
import de.digiway.rapidbreeze.server.config.ServerConfigurationFixtures;
import de.digiway.rapidbreeze.shared.rest.ResourceLocation;
import de.digiway.rapidbreeze.shared.rest.server.ServerVersionResource;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;
import org.junit.Test;
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
import org.junit.Before;

/**
 *
 * @author Sigurd Randoll <srandoll@digiway.de>
 */
public class ServerInformationResourceIT extends JerseyTest {

    private static ServerConfigurationFixtures serverConfigurationFixtures = mock(ServerConfigurationFixtures.class);

    @Override
    protected AppDescriptor configure() {
        return new WebAppDescriptor.Builder().
                initParam(WebComponent.RESOURCE_CONFIG_CLASS, ClassNamesResourceConfig.class.getName()).
                initParam(ClassNamesResourceConfig.PROPERTY_CLASSNAMES, ServerInformationResource.class.getName() + ";" + ServerConfigurationFixtures.class.getName() + ";" + ServerVersionResource.class.getName() + ";" + MockServerInformationResourceProvider.class.getName()).
                build();
    }

    @Before
    public void setup() {
    }

    @Test
    public void testGetServerVersion() throws Exception {
        final String VERSION = "testVersion";
        when(serverConfigurationFixtures.getServerVersion()).thenReturn(VERSION);

        WebResource webResource = resource();
        ServerVersionResource resource = webResource.path(ResourceLocation.SERVER_INFORMATION_RESOURCE_PATH + "/" + ResourceLocation.SERVER_INFORMATION_VERSION_RESOURCE_PATH).type(MediaType.APPLICATION_XML).get(ServerVersionResource.class);
        assertEquals(VERSION, resource.getVersion());
    }

    @Provider
    public static class MockServerInformationResourceProvider extends SingletonTypeInjectableProvider<Context, ServerConfigurationFixtures> {

        public MockServerInformationResourceProvider() {
            super(ServerConfigurationFixtures.class, serverConfigurationFixtures);
        }
    }
}
